package com.gitee.sparta.core.process.operate;

import com.gitee.sparta.core.bean.metadata.Metadata;

/**
 * 操作 readable_tab 的接口定义
 *
 * @author zyred
 * @since v 0.0.1
 */
public interface ReadableTabOperate<V> {

    /**
     * 删除 readable_tab 中已经读取过的数据
     *
     * @param fullTopic     topic:metaId
     * @param readableKey   readable_tab 的 key 值
     */
    void delReadableTab(final String fullTopic, final String readableKey);

    /**
     * 删除 readable_tab 与 metadata_tab 中的数据
     *
     * @param fullTopic      完整的 topic: topic:metaId
     * @param readableTabKey readable_tab 的键
     * @param metadataTabKey metadata_tab 的键
     */
    void delMetadataReadableTab(final String fullTopic, final  String readableTabKey, final String metadataTabKey);

    /**
     * 续期与重试
     *
     * @param readableTabKey readable_tab key
     * @param timeoutTabKey  timeout_tab key
     * @param metadataTabKey metadata_tab key
     * @param fullTopic      完整的 topic : topic:metaId
     * @param metadata       metadata
     */
    void renewOrRetry(final String readableTabKey,
                      final String timeoutTabKey,
                      final String metadataTabKey,
                      final String fullTopic,
                      final Metadata<V> metadata);

    /**
     * 删除 readable_tab 中的 fullTopic 数据
     *
     * @param fullTopic         topic:metaId
     * @param readableTabKey    readable_tab key
     */
    void delSegmentReadableTab(String fullTopic, String readableTabKey);

    /**
     * 分段消费，消费完毕后的删除
     *
     * @param fullTopic         完整的 topic， topic:metaId-segmentNum
     * @param metadataField     metadata_tab 中的 topic，topic:metaId
     * @param readableTabKey    readable_tab key
     * @param metadataTabKey    metadata_tab key
     */
    void delSegmentFinishedConsumption(String fullTopic, String metadataField,
                                       String readableTabKey, String metadataTabKey);

}
